package com.hsylient.javase.chapter02.demo02.demo01;

/**
 * 如下展示的是一个普通内部类
 *
 * 1. 在这里Student类为InnerClass类的普通内部类
 * 2. 普通内部类对象依赖外部类对象而存在，即在创建一个普通内部类对象时首先需要创建其外部类对象
 */
public class InnerClass {

    public int outField1 = 1;
    protected int outField2 = 2;
    int outField3 = 3;
    private int outField4 = 4;

    /**
     * 外部类可以访问所有权限的内部类属性
     */
    public void getInnerClassField() {
        Student student = new Student();
        System.out.println(student.name);
        System.out.println(student.age);
    }

    /**
     * 普通内部类
     */
    public class Student {
        private String name= "hsylient";
        private Integer age = 22;
        // 普通内部类中不能定义 static 属性
        // private static String city;

        /**
         * 内部类可以访问所有权限的外部类属性
         */
        public void getOutClassField() {
            System.out.println(outField1);
            System.out.println(outField2);
            System.out.println(outField3);
            System.out.println(outField4);
        }
    }
}
